package admin

import (
	"Walker/app/http/model"
	"Walker/app/http/validator"
	"Walker/app/http/validator/admin"
	"Walker/app/services"
	"Walker/app/utils/data"
	"Walker/app/utils/response"
	"github.com/gin-gonic/gin"
	"strings"
)

type User struct {
	userService services.AdminUserService
}

// 	@Tags 管理员管理模块
// 	@Summary 管理员列表
// 	@Description 管理员列表
// 	@Accept json
// 	@Produce json
// 	@Param keywords query string false "关键词"
// 	@Param status query int false "状态1是正常0是异常"
// 	@Success 200 {object} response.JsonResult{data=model.AdminUserPage,total_rows=int}
// 	@Failure 400 {object} response.JsonResult
// 	@Router /system_user [get]
//	@Security ApiKeyAuth
func (User *User) Index(ctx *gin.Context) {
	//登录生成token
	data, err := User.userService.Index(ctx)
	if err != nil {
		response.Error(ctx, err.Error())
		return
	}
	response.Success(ctx, "查询成功", data)
}

// 	@Tags 管理员管理模块
// 	@Summary 添加管理员
// 	@Description 添加管理员
// 	@Accept json
// 	@Produce json
// 	@Param body body admin.UserRequest true "数据json"
// 	@Success 200 {object} response.JsonResult
// 	@Failure 400 {object} response.JsonResult
// 	@Router /system_user [post]
//	@Security ApiKeyAuth
func (User *User) Store(ctx *gin.Context) {
	var param admin.UserRequest
	err := validator.Verify(ctx, &param)
	if err != nil {
		response.Error(ctx, err.Error())
		return
	}
	//添加角色
	err = User.userService.Edit(0, param)
	if err != nil {
		response.Error(ctx, err.Error())
		return
	}
	response.Success(ctx, "添加成功", "")
}

// 	@Tags 管理员管理模块
// 	@Summary 修改管理员
// 	@Description 修改管理员
// 	@Accept json
// 	@Produce json
// 	@Param id path string true "主键id"
// 	@Param body body admin.UserRequest true "数据json"
// 	@Success 200 {object} response.JsonResult
// 	@Failure 400 {object} response.JsonResult
// 	@Router /system_user/{id} [put]
//	@Security ApiKeyAuth
func (User *User) Update(ctx *gin.Context) {
	var param admin.UserRequest
	err := validator.Verify(ctx, &param)
	if err != nil {
		response.Error(ctx, err.Error())
		return
	}
	//添加角色
	err = User.userService.Edit(uint(data.StringToInt(ctx.Param("id"))), param)
	if err != nil {
		response.Error(ctx, err.Error())
		return
	}
	response.Success(ctx, "修改成功", "")
}

// 	@Tags 管理员管理模块
// 	@Summary 删除管理员
// 	@Description 删除管理员
// 	@Accept json
// 	@Produce json
// 	@Param id path string true "主键id"
// 	@Success 200 {object} response.JsonResult
// 	@Failure 400 {object} response.JsonResult
// 	@Router /system_user/{id} [delete]
//	@Security ApiKeyAuth
func (User *User) Destroy(ctx *gin.Context) {
	ids := strings.Split(ctx.Param("id"), ",")
	if result := model.UseCon().Delete(model.AdminUser{}, ids); result.Error != nil {
		response.Error(ctx, result.Error.Error())
		return
	}
	response.Success(ctx, "删除成功", "")
}

// 	@Tags 管理员管理模块
// 	@Summary 查看管理员
// 	@Description 查看管理员
// 	@Accept json
// 	@Produce json
// 	@Param id path string true "主键id"
// 	@Success 200 {object} response.JsonResult{data=model.AdminUser}
// 	@Failure 400 {object} response.JsonResult
// 	@Router /system_user/{id} [get]
//	@Security ApiKeyAuth
func (User *User) Show(ctx *gin.Context) {
	var data model.AdminUser
	result := model.UseCon().Where("id=?", ctx.Param("id")).First(&data)
	if result.Error != nil || result.RowsAffected == 0 {
		response.Error(ctx, "内容不存在")
	}
	response.Success(ctx, "查询成功", result)
}
